const { whiteList } = require('../conf')
const { verifyToken, getUser } = require('../utils/index.js')

exports.checkLogin = async (ctx, next) => {
  // 白名单(登录，登出）不需要验证Token
  if (!whiteList.includes(ctx.url)) {
    const { token } = ctx.headers
    let index = global.blackTokenList.indexOf(token)
    if (!verifyToken(token)) {
      // 弹出这个元素，不允许访问，重新登录获取Token
      global.blackTokenList.splice(index, 1);
      return ctx.tokenExpires('无效token,请重新登录')
    } else {
      // 黑名单：退出后的token(没有办法去设置让它失效)，如果验证Token有效，但是存在黑名单中，则不能往下走，要重新登录
      if (index !== -1) {
        return ctx.tokenExpires('token已经失效')
      }
      // 解析token并存储到ctx上面，ctx.state 本次请求的共享数据
      ctx.state.user = getUser(token)
    }
  }

  await next()
}